diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..503118a63d53fd11bb65cd93fed939a273d31e8f
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,43 @@
+image: alpine
+
+stages:
+  - deploy
+
+variables:
+  ENV_FILE: ".env"
+
+deploy_to_remote_server:
+  stage: deploy
+  before_script:
+    - apk add --no-cache rsync openssh
+    - mkdir -p ~/.ssh
+    - echo "$SSH_PRIVATE_KEY" >> ~/.ssh/id_rsa
+    - chmod 600 ~/.ssh/id_rsa
+    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
+  script:
+    - echo $SERVER_USER
+    - echo $SERVER_IP
+    - echo $REMOTE_DIR
+
+    # Create .env file
+    - echo "MODEL_ID=$MODEL_ID" > $ENV_FILE
+    - echo "START_DATE=$START_DATE" >> $ENV_FILE
+    - echo "END_DATE=$END_DATE" >> $ENV_FILE
+    - echo "HOME_DIR=$HOME_DIR" >> $ENV_FILE
+    - echo "WEATHER_DATA_DIR=$WEATHER_DATA_DIR" >> $ENV_FILE
+    - echo "WEATHER_DATA_FILENAME_PATTERN=$WEATHER_DATA_FILENAME_PATTERN" >> $ENV_FILE
+    - echo "WEATHER_DATA_FILENAME_DATEFORMAT=$WEATHER_DATA_FILENAME_DATEFORMAT" >> $ENV_FILE
+    - echo "LOCAL_TIMEZONE=$LOCAL_TIMEZONE" >> $ENV_FILE
+    - echo "DATA_DIR=$DATA_DIR" >> $ENV_FILE
+    - echo "MAPFILE_DIR=$MAPFILE_DIR" >> $ENV_FILE
+    - echo "MAPSERVER_DATA_DIR=$MAPSERVER_DATA_DIR" >> $ENV_FILE
+    - echo "MAPSERVER_MAPFILE_DIR=$MAPSERVER_MAPFILE_DIR" >> $ENV_FILE
+    - echo "MAPSERVER_LOG_FILE=$MAPSERVER_LOG_FILE" >> $ENV_FILE
+    - echo "MAPSERVER_IMAGE_PATH=$MAPSERVER_IMAGE_PATH" >> $ENV_FILE
+    - echo "MAPSERVER_EXTENT=$MAPSERVER_EXTENT" >> $ENV_FILE
+
+    # Copy files to server
+    - rsync -avz --progress $ENV_FILE $MODEL_ID.cfg $MODEL_ID.py run_$MODEL_ID.sh test_$MODEL_ID.py requirements.txt requirements.txt $SERVER_USER@$SERVER_IP:$HOME_DIR
+    - rsync -avz --progress --rsync-path="mkdir -p $HOME_DIR/mapfile && rsync" mapfile/ $SERVER_USER@$SERVER_IP:$HOME_DIR/mapfile/
+  only:
+    - release