Skip to content

Instantly share code, notes, and snippets.

@night-codes
Last active March 13, 2025 10:21
Show Gist options
  • Save night-codes/10c09f06ad78ae401c69 to your computer and use it in GitHub Desktop.
Save night-codes/10c09f06ad78ae401c69 to your computer and use it in GitHub Desktop.

Revisions

  1. @mirrr mirrr revised this gist Oct 30, 2015. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion golangDeploy.md
    Original file line number Diff line number Diff line change
    @@ -1,8 +1,9 @@
    ## 1) Создаем юзера под которым будет работать приложение, задаем пароль и переключаемся на него:
    ```bash
    useradd -s /bin/bash <имя_пользователя>
    passwd <имя_пользователя>
    su <имя_пользователя>

    ```

    ## 2) Генерируем новый ключ для деплоя
    ```bash
  2. @mirrr mirrr created this gist Oct 30, 2015.
    107 changes: 107 additions & 0 deletions golangDeploy.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,107 @@
    ## 1) Создаем юзера под которым будет работать приложение, задаем пароль и переключаемся на него:
    useradd -s /bin/bash <имя_пользователя>
    passwd <имя_пользователя>
    su <имя_пользователя>


    ## 2) Генерируем новый ключ для деплоя
    ```bash
    ssh-keygen -t rsa -C "<имя_пользователя>@<домен_сервиса>"
    cat ~/.ssh/id_rsa.pub
    ```

    Например, в gitlab добавляем этот ключ Project>Settings>Deploy Key

    ## 3) Клонируем приложение и собираем приложение
    ```bash
    cd ~
    git clone ssh://______.git app
    # здесь не буду расписывать, можно устанавливать через go get и т.д. способы отличаются
    # для go get нужно прописать $GOPATH в .bash_profile
    ```

    ## 4) Создаем systemd service
    ```bash
    exit #выходим из-под юзера
    nano /usr/lib/systemd/system/<имя_сервиса>.service
    ```

    Вписываем:
    ```bash
    [Unit]
    Description=<Описание>

    [Service]
    Restart=always
    RestartSec=10
    EnvironmentFile=-/home/<имя_пользователя>/env
    WorkingDirectory=/home/<имя_пользователя>/app
    ExecStart=/home/<имя_пользователя>/app/appName
    LimitNOFILE=524576
    LimitNPROC=524576
    User=<имя_пользователя>
    Group=<имя_пользователя>
    StandardOutput=syslog
    StandardError=syslog
    SyslogIdentifier=<имя_сервиса>


    [Install]
    WantedBy=multi-user.target
    ```

    ## 5) Запускаем сервис и ставим в автозагрузку:
    ```bash
    systemctl start <имя_сервиса>
    systemctl enable <имя_сервиса>
    ```

    Посмотреть статус:
    ```bash
    systemctl status <имя_сервиса>
    ```

    ## 6) Разрешаем просмотр логов и перезапуск сервиса под созданным пользователем
    Добавляем в `/etc/sudoers` строчки:

    ```bash
    Defaults:<имя_пользователя> !authenticate
    <имя_пользователя> ALL=/usr/bin/systemctl restart <имя_сервиса>, /usr/bin/systemctl stop <имя_сервиса>, /usr/bin/systemctl start <имя_сервиса>, /usr/bin/journalctl
    ```

    Теперь эти операции не будут требовать пароля:
    ```bash
    sudo journalctl -f -u <имя_сервиса>
    sudo systemctl stop <имя_сервиса>
    sudo systemctl start <имя_сервиса>
    sudo systemctl restart <имя_сервиса>
    ```

    ## 7) настраиваем виртуальный хост nginx для проксирования на порт приложения, если требуется:
    ```bash
    server {
    listen 80;
    server_name site.ru;

    client_max_body_size 256m;
    access_log /var/log/nginx-site-acc;
    error_log /var/log/nginx-site-err;
    log_not_found off;

    location ^~ / {
    proxy_pass http://localhost:<порт_приложения>;
    proxy_set_header Host $host:$server_port;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_buffer_size 16k;
    proxy_buffers 32 16k;
    proxy_connect_timeout 300;
    proxy_send_timeout 300;
    proxy_read_timeout 300;
    }

    location ^~ /files {
    alias /home/<имя_пользователя>/app/some_files;
    }
    }
    ```