National Public Mania

    deploy-golang-vps-autostart-service

    0.1.2 • Public • Published

    DEPLOY GOLANG TO VPS SSH WIDTH GIT PUSH AND CRONTAB AUTORUN SERVICE

    Step 1: setup.sh

    #!/bin/bash 
    read -p "Enter work folder (ex: /srv): " SRV
    $SRV ] && [ -s $SRV ] && echo "Work folder: "$SRV || exit
    read -p "Enter PROJECT: " PROJECT
    [ -s $PROJECT ] && exit || echo "PROJECT "$PROJECT
    read -p "Enter RUNFILE: " RUNFILE
    [ -s $RUNFILE ] && exit || echo "RUNFILE "$RUNFILE
    read -p "Enter IPSERVER: " IPSERVER
    read -p "Enter GOLANG listen PORT (ex: 8080): " PORT
    echo "Listen PORT: "$PORT
    read -p "Enter ENV (ex: prod or staging): " ENV
    echo "--------------------BEGIN-----------------------"
     
    echo "BEGIN SETUP PROJECT "$PROJECT
    TMP=$SRV/tmp/ && echo "+ TMP "$TMP
    WWW=$SRV/www/ && echo "+ WWW "$WWW
    GIT=$SRV/git/ && echo "+ GIT "$GIT
    echo "------------------------------------------------"
     
    ! -d $TMP ] && sudo mkdir -p $TMP && echo $TMP" created" && sudo chgrp -R users $TMP && echo $TMP" chgrp users" && sudo chmod g+w $TMP && echo $TMP" chmod g+w" || echo $TMP" find"
    ! -d $WWW ] && sudo mkdir -p $WWW && echo $WWW" created" && sudo chgrp -R users $WWW && echo $WWW" chgrp users" && sudo chmod g+w $WWW && echo $WWW" chmod g+w" || echo $WWW" find"
    echo "------------------------------------------------"
     
    ! -d $GIT$PROJECT.git ] && sudo mkdir -p $GIT$PROJECT.git && echo $GIT$PROJECT.git" created" || echo $GIT$PROJECT.git" find"
    cd $GIT$PROJECT.git/ && echo "cd $GIT$PROJECT.git/"
    echo "------------------------------------------------"
     
    sudo git init --bare && echo "git init --bare"
    echo "------------------------------------------------"
     
    sudo chgrp -R users . && echo "chgrp -R users ."
    sudo chmod -R g+rwX . && echo "chmod -R g+rwX ."
    sudo find . -type d -exec chmod g+s '{}' + && echo "find . -type d -exec chmod g+s '{}' +"
    echo "------------------------------------------------"
     
    sudo git config core.sharedRepository group && echo "git config core.sharedRepository group"
    echo "------------------------------------------------"
     
    cd $GIT$PROJECT.git/hooks/ && echo "cd $GIT$PROJECT.git/hooks/"
    echo "------------------------------------------------"
     
    sudo rm $GIT$PROJECT.git/hooks/post-receive && echo "rm $GIT$PROJECT.git/hooks/post-receive"
    sudo echo '#!/bin/bash
     
    # The production directory
    WWW='$WWW$PROJECT'
     
    # A temporary directory for deployment
    TMP='$TMP$PROJECT'
     
    # The Git repo
    GIT='$GIT$PROJECT.git'
     
    # Deploy the content to the temporary directory
    mkdir -p $TMP
    git --work-tree=$TMP --git-dir=$GIT checkout -f
     
    # Do stuffs, like npm install
    cd $TMP || exit
     
    # Replace the content of the production directory
    # with the temporary directory
    cd / || exit
    rm -rf $WWW
    mv $TMP $WWW
     
    # Do stuff like starting docker
    cd $WWW || exit
    # docker-compose up -d --build
     
    go build .
    chmod +x '$RUNFILE'
    mv '$RUNFILE' '$RUNFILE$PORT'
    kill $(pidof -s $WWW/'$RUNFILE$PORT')
    systemctl restart '$PROJECT >> $GIT$PROJECT.git/hooks/post-receive && echo $GIT$PROJECT.git/hooks/post-receive" created"
     
    sudo touch $GIT$PROJECT.git/hooks/post-receive && echo "touch $GIT$PROJECT.git/hooks/post-receive"
    sudo chmod +x $GIT$PROJECT.git/hooks/post-receive && echo "chmod +x $GIT$PROJECT.git/hooks/post-receive"
     
    sudo systemctl disable $PROJECT && echo "sudo systemctl disable $PROJECT"
    sudo systemctl stop $PROJECT && echo "sudo systemctl stop $PROJECT"
    sudo rm /lib/systemd/system/$PROJECT.service && echo "rm /lib/systemd/system/$PROJECT.service"
    sudo echo '[Unit]
    Description='$PROJECT'
     
    [Service]
    Type=simple
    ExecStart='$WWW$PROJECT/$RUNFILE$PORT $PORT'
    Restart=on-failure
    RestartSec=10
     
    [Install]
    WantedBy=multi-user.target' >> /lib/systemd/system/$PROJECT.service && echo /lib/systemd/system/$PROJECT.service" created"
     
    sudo chmod +x /lib/systemd/system/$PROJECT.service && echo "chmod +x /lib/systemd/system/$PROJECT.service"
     
    sudo rm $HOME/restart-service-$PROJECT.sh && echo "rm $HOME/restart-service-$PROJECT.sh"
    sudo echo '#!/bin/bash
    if [[ ! $(pidof -s '$WWW$PROJECT/$RUNFILE$PORT') > 0 ]]
    then
       systemctl start '$PROJECT'
    fi' >> $HOME/restart-service-$PROJECT.sh && echo $HOME/restart-service-$PROJECT.sh" created"
     
    sudo chmod +x $HOME/restart-service-$PROJECT.sh && echo "chmod +x $HOME/restart-service-$PROJECT.sh"
    sudo systemctl enable $PROJECT && echo "sudo systemctl enable $PROJECT"
    sudo systemctl restart $PROJECT && echo "sudo systemctl restart $PROJECT"
    echo '-------------------------------------------------------------------------------'
    echo 'git remote add '$ENV' ssh://root@'$IPSERVER$SRV'/git/'$PROJECT'.git/'
    echo '-------------------------------------------------------------------------------'

    Server

    sudo -i
    sh /path/to/setup.sh
     
    read -p "Enter PROJECT: " PROJECT && [ -s $PROJECT ] && exit || echo "PROJECT "$PROJECT
     
    sudo systemctl start $PROJECT
    sudo systemctl enable $PROJECT

    Local

    # LOCAL DEPLOY 
    read -p "Enter PROJECT: " PROJECT && echo "PROJECT "$PROJECT
    read -p "Enter ipv4 IPSERVER: " IPSERVER && echo "IPSERVER ipv4 "$IPSERVER
     
    cd /path/to/$PROJECT
    git init
    git remote add deploy ssh://root@$IPSERVER/srv/git/$PROJECT.git/
     
    git add . 
    git commit -m "<commit message>"
    git push deploy master

    Server Config cron & nginx

    read -p "Enter work folder (ex: /srv): " SRV
    $SRV ] && [ -s $SRV ] && echo "Work folder: "$SRV || exit
    read -p "Enter PROJECT: " PROJECT
    [ -s $PROJECT ] && exit || echo "PROJECT "$PROJECT
    read -p "Enter RUNFILE: " RUNFILE
    [ -s $RUNFILE ] && exit || echo "RUNFILE "$RUNFILE
    WWW=$SRV/www/ && echo "+ WWW "$WWW
     
    # CRONTAB SETUP 
    sudo nano /etc/cron.allow
     
    root
    <user>
     
    # EDIT CRONTA 
    crontab -e
     
    # every 1 min 
    #*/1 * * * * /root/restart-service-<your-app>.sh 
     
    # every 10 sec 
    * * * * * ( /root/restart-service-<your-app>.sh)
    * * * * * ( sleep 10 ; /root/restart-service-<your-app>.sh)
    * * * * * ( sleep 20 ; /root/restart-service-<your-app>.sh)
    * * * * * ( sleep 30 ; /root/restart-service-<your-app>.sh)
    * * * * * ( sleep 40 ; /root/restart-service-<your-app>.sh)
    * * * * * ( sleep 50 ; /root/restart-service-<your-app>.sh)
     
    kill $(pidof -s $WWW$PROJECT/$RUNFILE)
     
    # NGINX CONFIG 
    sudo apt install nginx
     
    nano /etc/nginx/conf.d/<your-app-config>.conf
     
    server {
        listen 80;
        root /root/path;
        server_name <ipv4 or hostname>;
        access_log /var/log/nginx/<project>_client_access.log;
        error_log /var/log/nginx/<project>_client_error.log;
     
        location /<your-app>{
            proxy_pass http://127.0.0.1:<PORT>/;
        }
    }
     
    sudo service nginx restart
     
    # http://ipv4/<your-app>/ 
     

    Install

    npm i deploy-golang-vps-autostart-service

    DownloadsWeekly Downloads

    0

    Version

    0.1.2

    License

    ISC

    Unpacked Size

    6.67 kB

    Total Files

    2

    Last publish

    Collaborators

    • manhavn