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>/ 
 

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 0.1.2
    1
    • latest

Version History

  • Version
    Downloads (Last 7 Days)
    • Published
  • 0.1.2
    1

Package Sidebar

Install

npm i deploy-golang-vps-autostart-service

Weekly Downloads

1

Version

0.1.2

License

ISC

Unpacked Size

6.67 kB

Total Files

2

Last publish

Collaborators

  • manhavn