https://gitlab-com.gitlab.io/support/toolbox/upgrade-path

 

Upgrade Path

 

gitlab-com.gitlab.io

 

깃랩은 최신버전을 업데이트하는게 아니라서 검색후 순서대로 업데이트 하면 됨

 

 

'Docker' 카테고리의 다른 글

도커로 실행중인 깃랩 자동 백업 스크립트  (0) 2024.11.27
docker-compose.yml 설정  (0) 2024.09.12
#!/bin/bash

# 설정
CONTAINER_NAME="gitlab" # GitLab 컨테이너 이름
BACKUP_DIR="/backup" # 백업위치
RETENTION_DAYS=30 # 보관 기간 (일) , 필요시 사용

# 함수: 로그 출력
log() {
    echo "[$(date)] $1"
}

# 1. 백업 생성
log "백업 생성 중..."
docker exec -t "$CONTAINER_NAME" gitlab-backup create

# 2. 컨테이너에서 최신 백업 파일 찾기
log "최신 백업 파일 검색 중..."
LATEST_BACKUP=$(docker exec -t "$CONTAINER_NAME" ls /var/opt/gitlab/backups | grep '.tar' | tail -n 1 | tr -d '\r' | tr -d '\n')
if [ -z "$LATEST_BACKUP" ]; then
    log "최신 백업 파일을 찾지 못했습니다. 백업 파일이 생성되었는지 확인하세요."
    exit 1
fi

log "최신 백업 파일: $LATEST_BACKUP"

# 3. 최신 백업 파일 복사
log "최신 백업 파일 복사 중..."
docker cp "$CONTAINER_NAME:/var/opt/gitlab/backups/$LATEST_BACKUP" "$BACKUP_DIR"
if [ $? -eq 0 ]; then
    log "백업 파일 복사 완료: $BACKUP_DIR/$LATEST_BACKUP"

    # 4. 컨테이너 내부 백업 파일 삭제
    log "컨테이너 내부 백업 파일 삭제 중..."
    docker exec -t "$CONTAINER_NAME" rm -f "/var/opt/gitlab/backups/$LATEST_BACKUP"
    if [ $? -eq 0 ]; then
        log "컨테이너 내부 백업 파일 삭제 완료: $LATEST_BACKUP"
    else
        log "컨테이너 내부 백업 파일 삭제 실패! 수동으로 확인하세요."
    fi
else
    log "백업 파일 복사 실패! 파일을 삭제하지 않습니다."
    exit 1
fi

# 5. 오래된 백업 파일 삭제
log "$RETENTION_DAYS일 이상 지난 백업 파일 삭제 중..."
find "$BACKUP_DIR" -type f -name '*.tar' -mtime +$RETENTION_DAYS -exec rm -f {} \;
if [ $? -eq 0 ]; then
    log "$RETENTION_DAYS일 이상 지난 백업 파일 삭제 완료."
else
    log "오래된 백업 파일 삭제 실패! 수동으로 확인하세요."
fi

# 6. 완료 메시지 출력
log "자동화 작업 완료."

 

컨테이너 내부의 var/opt/gitlab/backups 경로를 수정할 경우에는 따로 변수로 빼서 사용하면 될 것 같다.

'Docker' 카테고리의 다른 글

깃랩 업데이트  (0) 2024.11.27
docker-compose.yml 설정  (0) 2024.09.12

1. OS 확인

cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.4 LTS"

 

2. apt install rdate

 

3. /usr/sbin/rdate -s time.bora.net

4. 확인

5. 시간 차 날 수 도있으니 크론에 등록 하면 마무리

'Linux' 카테고리의 다른 글

리눅스 CentOS6 설치 후 셋팅  (0) 2024.02.15

1. 현재 미니 pc 로 홈 서버를 운영중인데 PHP 도쓰고 node 도 쓰고 하다보니 같은 80포트와 443 포트에 사용하기위해 도커 도입을 결정하였다.

 

 

2. 도커랑 도커컴포즈 설치 (환경 Ubuntu 22.04.2 LTS) 

 

3. 디렉토리는  /home 에 prod 랑 dev 를 구분해두었다

 

4. /home/prod 에 docker-compose.yml 작성 후 

version: '3.8'

x-common-settings: &common-settings
  env_file:
    - ./envs/.env

services:
  php:
    build:
      context: ./php
      dockerfile: Dockerfile
    container_name: php74-fpm_prod
    environment:
      TZ: "Asia/Seoul"
    volumes:
      - ./projects/project_name/www:/var/www/html/project_name
    networks:
      shared_network_prod:
        ipv4_address: 172.xx.x.x
    <<: *common-settings
  composer:
    container_name: composer_prod
    image: composer:latest
    volumes:
      - ./projects/project_name/www:/app
    working_dir: /app
    command: install
    <<: *common-settings
    networks:
      shared_network_prod:
        ipv4_address: 172.xx.x.x
  nginx:
    build:
      context: ./nginx
      dockerfile: Dockerfile
    container_name: nginx_proxy_prod
    image: nginx_proxy_prod
    environment:
      TZ: "Asia/Seoul"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:r - read 만 가능하도록
      - ./projects/project_name/ssl/:/etc/ssl/project_name/
      - ./nginx/log/nginx:/var/log/nginx
      - ./projects/project_name/www:/var/www/html/project_name
      #- ./certbot/conf:/etc/letsencrypt
      #- ./certbot/www:/var/www/certbot
    <<: *common-settings
    networks:
      shared_network_prod:
        ipv4_address: 172.xx.x.x
  db:
    build:
      context: ./postgresql
      dockerfile: Dockerfile
    container_name: postgres_prod
    environment:
      TZ: "Asia/Seoul"
    ports:
      - "5433:5432"
    volumes:
      - ./postgresql/data:/var/lib/postgresql/data
    networks:
      shared_network_prod:
        ipv4_address: 172.xx.x.x

  node-app:
    build:
      context: ./node_study
      dockerfile: Dockerfile
    container_name: node_study_prod
    ports:
      - "6000:3000"
    volumes:
      - ./node_study/node-api-study:/usr/src/app
      - /usr/src/app/node_modules
    networks:
      shared_network_prod:
        ipv4_address: 172.xx.x.x
    command: ["npm", "run", "start"]


networks:
  shared_network_prod:
    external:
      name: nwtwork_name

 

- ports 는 환경에따라 변경하면 되고 

하위 디렉토리는 

이런 구조로 작업했다.

 

 

도커 관리 툴로  portainer 가 사용해보니 좋은거 같던데 나중에 블로그 써서 자세하게 쓰겠다

'Docker' 카테고리의 다른 글

깃랩 업데이트  (0) 2024.11.27
도커로 실행중인 깃랩 자동 백업 스크립트  (0) 2024.11.27

1. PHP 5.3.7 보다 크고 7.5 보다 낮게 설정 권장 (chriskacerguis/codeigniter-restserver 3.1.5 사용중)

2. 사용된 프레임워크 : CI 3.1.12, 

3. 깃허브 주소: https://github.com/antam2010/ait  (현재 private)

 

사용방법 : 

- composer install 해서 라이브러리 설치

- vendor 디렉토리는 third_party 하위에 생성되도록 해놓았음

"config": {
        "vendor-dir": "application/third_party/vendor"
    },

 

- node 설치 후 글로벌로 apidoc 설치

- 해당 명령어는 주석으로 api-doc 문서 작성이나 수정하고 실행하면 됨

npm install -g apidoc

 

실서버 api-doc 생성일경우 :  apidoc -i application/controllers/ -o docs --config apidoc.prod.json --verbose
로컬 api-doc 생성일경우 :  apidoc -i application/controllers/ -o docs --config apidoc.local.json --verbose

 

4. 외부 API 사용법

- 모델에 해당 코드처럼 사용하면 됨

- require 하는이유는 밑처럼 subclass_prefix 를 MY 로 해두었지만 MY_Input, MY_Model 처럼 사용해야 자동으로 로드되됨

$config['subclass_prefix'] = 'MY_';
require_once APPPATH . 'core/MY_api_Model.php';
class model_name  extends MY_api_Model {

 

 - config/config.php 맨 하단에

$config['ai_api_domain'] = 외부api 주소

 

설정 후에 사용 하면 됨

 

5. 내부 모델은 core/MY_model.php 만들어놓았으니 extends 해서 사용

- class model_name  extends MY_Model {

 

 

 

1. node -v : 20.17.0 환경에서 개발

2. DB : PostgresSQl 

3. 프레임워크 : express

2.구조 

  • src/ # 소스 코드
  • config/ # 데이터베이스 및 환경 변수 설정 파일
  • controllers/ # API 엔드포인트에 대한 비즈니스 로직
  • middlewares/ # 미들웨어 (예: 인증) │
  • models/ # 데이터베이스 모델 (PostgreSQL과 Sequelize 사용)  ORM 
  • routes/ # API 라우트 설정
  • services/ # 외부 API 호출 등 서비스 로직
  • utils/ # 유틸리티 함수 모음

3. 스웨거 주소 : https://node-api.daeho2.shop/api-docs/ 

 

Swagger UI

 

node-api.daeho2.shop

 

간단하게 회원가입만 구현해놓음

 

https://github.com/antam2010/node-api-study

현재 video.js 8.12.0 버전 사용중인데 웹에서는 문제가 없는데 앱에서 풀스크린을 하면 화면이 박살나는 문제가 있었다.

 

풀스크린을 할때마다 width 랑 height 를 서로 바꿔주고  가로모드 일 때 깃허브에 올라와있는 소스도 참고해보고 해도 소용이 없었다.

 

playsinlne 을 없애면 문제가없는데 무조건 전체화면에서 실행해야하다보니 꼼수를 썻다.

 

controls 를 커스터마이징한 소스를 써야하는데 아이폰에서는 기본적으로 인라인으로 재생하다가 풀스크린 할 때는 기본 HTML5 비디오를 사용하도록 하였다.

 

<video id="my-video" class="video-js vjs-default-skin" preload="auto" playsinline>

 

this.player = videojs('my-video', this.options);
this.player.controlBar.fullscreenToggle.off('touchstart'); // 앱에서 터치 이벤트 삭제
                this.player.controlBar.fullscreenToggle.on('touchstart', () => {
                    if (!this.player.isFullscreen()) {
                        $("video").removeAttr("playsinline");
                        this.player.pause();
                        this.player.play();
                        $("video").attr("playsinline", "playsinline");
                    }
                });

 

풀스크린을 누를때마다 풀스크린을 감지하기전에 그 버튼클릭 후  기본 비디오를 사용하게하고 playsinlne 을 삭제한 후에 비디오를 다시 재생시키고 미리 playsinlne 을 대기시켜놓게 바꾸어놓았다.

 

 

$issuer = "localhost";
$audience = "localhost";
$issuedAt = time() - 5; //발행시간
$notBefore = $issuedAt; // seconds 즉시사용으로 처리, 서버에서 지연설정 있을시 설정
$expirationTime = $issuedAt + (60 * G5_JWT_ACCESS_MTIME); //유효시간 

$payload = array(
    "id" => $id,
    "iss" => $issuer,
    "aud" => $audience,
    "iat" => $issuedAt,
    "nbf" => $notBefore,
    "exp" => $expirationTime
);

서버 A 에서 토큰을 생성 후 B서버에서 토큰을 인증할 때 nbf 에러가 발생하였다.

 

서버 A 와 B 서버에서 1초차이가 났는데 매일 자정마다 서버 시간을 업데이트 하지만 1초 차이가 통신하면서 나나 보다.

 

 

+ Recent posts