Cara mengatur penerapan aplikasi web di Go for Gitlab di VDS


Kata Pengantar


Artikel ini adalah hasil dari pencarian selama seminggu untuk informasi yang sangat terfragmentasi tentang cara mengkonfigurasi penyebaran layanan web di Go. Bukan di Heroku, bukan di Docker, bukan di Digital Ocean, tapi hanya di VDS kuno dengan CentOS 7x64. Untuk beberapa alasan jaringan tidak memiliki informasi ini, dan sebagian besar tutorial dimulai dengan cara mengatur build dan diakhiri dengan peluncuran tes.

Saya akan segera memperingatkan Anda bahwa untuk pertama kalinya saya mengatur proses CI / CD, jadi ini adalah artikel dari pemula hingga pemula.

Tentunya banyak yang bisa diperbaiki di sini, jadi saya akan menerima komentar apa pun dengan senang hati di komentar dan mencoba untuk memperbarui perubahan sesegera mungkin. Mungkin juga artikel seperti itu sudah ada, dan saya cukup menggunakan mesin pencari. Kemudian tolong berikan tautan untuk itu, dan dalam hal ini, saya akan menghapus artikel dan pergi untuk menaburkan abu di kepalaku.

Sumber data


  • Server VDS
  • OS: CentOS 7x64
  • Go project dengan struktur berikut:

src/ public/ index.html main.go 

Penyiapan server: Buat layanan


Pertama, buat layanan untuk aplikasi kita. Di CentOS 7, ini cukup sederhana. Anda perlu menulis skrip seperti itu di file bernama serviceName.service:

 [Unit] #   Description=Service Description After=network.target [Service] Type=simple #  ,       User=username #    ExecStart=/username/service/binaryFile Restart=on-abort [Install] WantedBy=multi-user.target 

Script itu sendiri harus diletakkan di folder dll / systemd / system /

Pengaturan SSH


Di server, jalankan perintah:

 ssh-keygen -f /etc/ssh/hmp.key 

Atas permintaan
Masukkan frasa sandi (kosong tanpa frasa sandi)
jangan masukkan kata sandi, cukup tekan Enter.

Dua file dihasilkan di folder / etc / ssh /:

  1. hmp.key - kunci pribadi
  2. hmp.key.pub - kunci publik

Kami membutuhkan kunci pribadi. Lihat isinya menggunakan perintah:

 cat /etc/ssh/hmp.key 

Akan terlihat seperti ini:

 -----BEGIN RSA PRIVATE KEY----- {    } -----END RSA PRIVATE KEY----- 

Semua sepenuhnya disalin ke papan klip Anda

PERHATIAN! - tidak hanya kunci itu sendiri, tetapi juga
----- AWAL KUNCI PRIVATE RSA ----- dan ----- AKHIR KUNCI PRIVATE RSA -----

Pengaturan Gitlab


Pertama, isi data penting untuk depot (nama pengguna, kata sandi, dll.).
Bahkan jika repositori Anda bersifat publik, mereka akan tetap ditutup.

Dalam Gitlab di repositori, buka Pengaturan -> CI / CD -> Variabel. Kami membuat variabel berikut di sana:

  • SSH_PRIVATE_KEY - rekatkan nilai yang disalin pada paragraf sebelumnya di sini
  • USER_PASS - kata sandi pengguna tempat aplikasi akan diluncurkan
  • USER - username dari mana aplikasi akan diluncurkan
  • HOST - alamat VDS Anda
  • TARGET_DIR_ON_HOST - folder target tempat layanan Anda akan berada dalam contoh saya adalah / nama pengguna / layanan /
  • SERVICE_NAME - nama layanan
  • GROUP_NAME adalah nama pengguna Gitlab Anda
  • REPOSITORY_NAME - nama repositori Anda

Tambahkan file .gitlab-ci.yml ke repositori dengan konten berikut:

 image: golang:latest before_script: #     sshpass - apt-get update -qq && apt-get install -y -qq sshpass #  ,    .   govendor,      - go get github.com/gorilla/mux - go get github.com/gorilla/websocket #  SSH - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null - mkdir -p ~/.ssh - chmod 700 ~/.ssh - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config #     - mkdir -p /go/src/gitlab.com/$GROUP_NAME #     - git clone git@gitlab.com:$GROUP_NAME/$REPOSITORY_NAME.git /go/src/gitlab.com/$GROUP_NAME/$REPOSITORY_NAME #      - mkdir -p $CI_PROJECT_DIR/build/ #        (, HTML- ..)  . #       src/public - cp -r $CI_PROJECT_DIR/src/public $CI_PROJECT_DIR/build stages: - build - deploy compile: stage: build script: #     Go  - cd /go/src/gitlab.com/$GROUP_NAME/$REPOSITORY_NAME/src #    . ,        build       main - go build -race -ldflags "-extldflags '-static'" -o $CI_PROJECT_DIR/build/main artifacts: paths: - $CI_PROJECT_DIR/build/main deploy: stage: deploy script: #      ()      public - cd $CI_PROJECT_DIR/build #   sshpass      VDS - sshpass -V - export SSHPASS=$USER_PASS #   - sshpass -e ssh -o stricthostkeychecking=no $USER@$HOST systemctl stop $SERVICE_NAME #    - sshpass -e scp -o stricthostkeychecking=no -r . $USER@$HOST:$TARGET_DIR_ON_HOST #   - sshpass -e ssh -o stricthostkeychecking=no $USER@$HOST systemctl restart $SERVICE_NAME 

Setelah menyetel, kami mendorong skrip ini ke dalam repositori dan kami memiliki perakitan siap pakai dan penyebaran. Itu saja!

Semoga artikel ini bermanfaat. Untuk setiap pertanyaan dan komentar saya akan dengan senang hati menjawab di komentar!

Source: https://habr.com/ru/post/id421087/


All Articles