diff --git a/jekyll/gitlab-ci-ruby_3_1.yml b/jekyll/gitlab-ci-ruby_3_1.yml
new file mode 100644
index 0000000000000000000000000000000000000000..2f6e48360665cfa9b77d543477a5099ca1eb44a7
--- /dev/null
+++ b/jekyll/gitlab-ci-ruby_3_1.yml
@@ -0,0 +1,79 @@
+image: ruby:3.1
+
+stages:
+  - build
+  - deploy
+
+variables:
+#  JEKYLL_ENV: production
+  LC_ALL: C.UTF-8
+  BUILD_DIR: public/
+
+cache:
+  paths:
+    - web/vendor/bundle/
+
+.build:
+  stage: build
+  before_script:
+    - apt-get update -qy
+    - gem install bundler
+    - cd web/
+    - bundle install --path vendor/bundle
+  script:
+    - bundle exec jekyll build -d $BUILD_DIR --config $CONFIG
+  artifacts:
+    paths:
+      - web/$BUILD_DIR
+
+.deploy:
+  stage: deploy
+  variables:
+  before_script:
+    - apt-get update -qy
+    - apt-get install -y lftp
+    - mkdir -p ~/.ssh
+    - chmod 700 ~/.ssh
+    - ssh-keyscan $SFTP_HOST >> ~/.ssh/known_hosts
+    - chmod 644 ~/.ssh/known_hosts
+    - cd web/
+  script:
+    - lftp -e "set sftp:auto-confirm yes;
+               open sftp://$SFTP_HOST;
+               user $SFTP_USER $SFTP_PASSWORD;
+               mirror --exclude-glob .git*
+                      --exclude .git/
+                      --reverse
+                      --verbose
+                      --delete
+                      $BUILD_DIR
+                      $DEPLOY_DIR;
+               bye"
+
+build.dev:
+  extends: .build
+  variables:
+    CONFIG: _config.yml,_config-dev.yml
+  only:
+    - web.dev
+
+build.prod:
+  extends: .build
+  variables:
+    CONFIG: _config.yml
+  only:
+    - web.prod
+
+deploy.dev:
+  extends: .deploy
+  variables:
+    DEPLOY_DIR: $DEV_DEPLOY_DIR
+  only:
+    - web.dev
+
+deploy.prod:
+  extends: .deploy
+  variables:
+    DEPLOY_DIR: $PROD_DEPLOY_DIR
+  only:
+    - web.prod