<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>주술쟁이 낙서장</title>
    <link>https://mesmerist.tistory.com/</link>
    <description>제가 여기 저기 나누어 놓은 정보를 하나로 모으려고 합니다.
하나 하나 잘 정리해 나도 보고 다른 이들과 나누겠습니다.</description>
    <language>ko</language>
    <pubDate>Fri, 19 Jun 2026 19:45:25 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>주술쟁이</managingEditor>
    <image>
      <title>주술쟁이 낙서장</title>
      <url>https://t1.daumcdn.net/cfile/tistory/135641334D19642132</url>
      <link>https://mesmerist.tistory.com</link>
    </image>
    <item>
      <title>redmine 마이그레이션</title>
      <link>https://mesmerist.tistory.com/entry/redmine-%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;구 버전에서 신버전으로 마이그레이션할 때 데이터 이동과 DB 백업 후 복원시 주의점.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 파일은 files 폴더에 그대로 복제하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. DB는 mysql에서 백업하여 신규 db에 복원한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 바뀐 스키마등이 반영되어야 하기 때문에 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;bundle 을 모두 새로해 주어야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;4. plugins은 반드시 새로운 버전에 호환되는 것만 남기고 삭제해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo cp /usr/local/redmine-3.4.4/files/2024/09/*.* /var/www/redmine/files/2024/09/ &lt;br /&gt;&lt;br /&gt;sudo&amp;nbsp;chown&amp;nbsp;www-data:www-data&amp;nbsp;-R&amp;nbsp;/var/www/redmine/files/2024/09/ &lt;br /&gt;&lt;br /&gt;sudo&amp;nbsp;mysql&amp;nbsp;-u&amp;nbsp;root&amp;nbsp;-p&lt;/p&gt;
&lt;pre id=&quot;code_1725601212021&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DROP USER 'redmine'@'localhost';
CREATE DATABASE redmine CHARACTER SET utf8mb4;
CREATE USER 'redmine'@'localhost' IDENTIFIED BY '비밀번호';
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
FLUSH PRIVILEGES;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;mysql -u redmine -p redmine &amp;lt; redmine_backup.sql &lt;br /&gt;&lt;br /&gt;cd&amp;nbsp;/var/www/redmine/ &lt;br /&gt;&lt;br /&gt;sudo&amp;nbsp;bundle&amp;nbsp;config&amp;nbsp;set&amp;nbsp;--local&amp;nbsp;without&amp;nbsp;'development&amp;nbsp;test' &lt;br /&gt;sudo&amp;nbsp;bundle&amp;nbsp;install &lt;br /&gt;sudo&amp;nbsp;bundle&amp;nbsp;exec&amp;nbsp;rake&amp;nbsp;generate_secret_token &lt;br /&gt;sudo&amp;nbsp;RAILS_ENV=production&amp;nbsp;bundle&amp;nbsp;exec&amp;nbsp;rake&amp;nbsp;db:migrate &lt;br /&gt;sudo&amp;nbsp;bundle&amp;nbsp;exec&amp;nbsp;rake&amp;nbsp;redmine:plugins:migrate&amp;nbsp;RAILS_ENV=production &lt;br /&gt;&lt;br /&gt;sudo&amp;nbsp;systemctl&amp;nbsp;restart&amp;nbsp;nginx&lt;/p&gt;</description>
      <author>주술쟁이</author>
      <guid isPermaLink="true">https://mesmerist.tistory.com/85</guid>
      <comments>https://mesmerist.tistory.com/entry/redmine-%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98#entry85comment</comments>
      <pubDate>Fri, 6 Sep 2024 14:43:13 +0900</pubDate>
    </item>
    <item>
      <title>nextcloud에 GEO 블럭하기</title>
      <link>https://mesmerist.tistory.com/entry/nextcloud%EC%97%90-GEO-%EB%B8%94%EB%9F%AD%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MaxMindGeoLite2이 무료로 사용할 수 있는 옵션이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. MaxMind 계정 생성하기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://www.maxmind.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;http://www.maxmind.com&lt;/a&gt; 에 회원가입하여 계정을 생성한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 계정 생성 후 라이센스 키 발급 받기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;계정 생성 후 웹사이트 로그인 하여 라이센스 키를 발급 받을 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. geoipupdate 설치하기&lt;/p&gt;
&lt;pre id=&quot;code_1724671972034&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;gt;sudo apt install geoipupdate
&amp;gt;sudo nano /etc/GeoIP.conf
# 위 파일에 아래과 사이트에서 발급 받은 라이센스키 정보를 기입한다.

AccountID YOUR_ACCOUNT_ID
LicenseKey YOUR_LICENSE_KEY
EditionIDs GeoLite2-Country&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 데이터베이스 업데이트 하기&lt;/p&gt;
&lt;pre id=&quot;code_1724672093751&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo geoipupdate

#업데이트 후 아래 경로에 파일이 생성된다.
/var/lib/GeoIP/GeoLite2-Country.mmdb&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5.crontab에 스케줄 추가하기. 스케줄을 등록하여 자동으로 갱신하도록 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1724672073557&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;gt;sudo crontab -e

#아래 txt 추가
0 2 * * 1 /usr/bin/geoipupdate&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. nextcloud 앱 메뉴에서 GeoBlocker를 설치한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 관리자 설정에 GeoBlocker 메뉴가 생성되고, 아래와 같이 설정할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1042&quot; data-origin-height=&quot;656&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zGaFC/btsJgzLpNFr/g1VPp4dMq8e9VQrE2sHfk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zGaFC/btsJgzLpNFr/g1VPp4dMq8e9VQrE2sHfk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zGaFC/btsJgzLpNFr/g1VPp4dMq8e9VQrE2sHfk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzGaFC%2FbtsJgzLpNFr%2Fg1VPp4dMq8e9VQrE2sHfk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1042&quot; height=&quot;656&quot; data-origin-width=&quot;1042&quot; data-origin-height=&quot;656&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필요시 차단하려고 하면 아래 옵션을 추가하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boNE81/btsJhihOo5v/VVSCszQFdH1rkXlK11JmwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boNE81/btsJhihOo5v/VVSCszQFdH1rkXlK11JmwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boNE81/btsJhihOo5v/VVSCszQFdH1rkXlK11JmwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboNE81%2FbtsJhihOo5v%2FVVSCszQFdH1rkXlK11JmwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;518&quot; height=&quot;86&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;86&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <author>주술쟁이</author>
      <guid isPermaLink="true">https://mesmerist.tistory.com/84</guid>
      <comments>https://mesmerist.tistory.com/entry/nextcloud%EC%97%90-GEO-%EB%B8%94%EB%9F%AD%ED%95%98%EA%B8%B0#entry84comment</comments>
      <pubDate>Mon, 26 Aug 2024 20:40:01 +0900</pubDate>
    </item>
    <item>
      <title>nextcloud 환경 설정</title>
      <link>https://mesmerist.tistory.com/entry/nextcloud-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95</link>
      <description>&lt;pre id=&quot;code_1724671134227&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?php
$CONFIG = array (
  'instanceid' =&amp;gt; '***',
  'passwordsalt' =&amp;gt; '***',
  'secret' =&amp;gt; '***',
  'trusted_domains' =&amp;gt; 
  array (
    0 =&amp;gt; '도메인1',
    1 =&amp;gt; '도메인2',
  ),
  'datadirectory' =&amp;gt; '/var/www/html/nextcloud/data',
  'skeletondirectory' =&amp;gt; '', //빈폴더로 생성  '/var/www/html/nextcloud/core/skeleton',
  'dbtype' =&amp;gt; 'mysql',
  'version' =&amp;gt; '29.0.5.1',
  'overwrite.cli.url' =&amp;gt; 'https://도메인1',
  'dbname' =&amp;gt; 'nextcloud',
  'dbhost' =&amp;gt; 'localhost',
  'dbport' =&amp;gt; '',
  'dbtableprefix' =&amp;gt; 'oc_',
  'mysql.utf8mb4' =&amp;gt; true,
  'dbuser' =&amp;gt; 'nextcloud',
  'dbpassword' =&amp;gt; 'DB비밀번호',
  'installed' =&amp;gt; true,
  'default_phone_region' =&amp;gt; 'KR',
  'maintenance_window_start' =&amp;gt; 3,
  'memcache.distributed' =&amp;gt; '\\OC\\Memcache\\Redis',
  'memcache.locking' =&amp;gt; '\\OC\\Memcache\\Redis',
  'memcache.local' =&amp;gt; '\\OC\\Memcache\\Redis',
  'bruteforce.protection.enabled' =&amp;gt; true,  // 브루트 포스 보호 기능 활성화 - 특정IP로 많이 접속하면 공격으로 보고 접속을 지연시킴.
  'bruteforce.protection.exempt_ips' =&amp;gt; ['내주접속IP'],  // 예외로 설정할 IP 주소 추가
  'redis' =&amp;gt; 
  array (
    'host' =&amp;gt; 'localhost',
    'port' =&amp;gt; 6379,
  ),
  'mail_smtpmode' =&amp;gt; 'sendmail',
  'mail_smtphost' =&amp;gt; '127.0.0.1',
  'mail_smtpport' =&amp;gt; '25',
  'mail_smtptimeout' =&amp;gt; 10,
  'mail_smtpauthtype' =&amp;gt; 'LOGIN',
  'mail_from_address' =&amp;gt; 'noempty',
  'mail_sendmailmode' =&amp;gt; 'pipe',
  'mail_domain' =&amp;gt; 'ncsoft.com',
  'remember_login_cookie_lifetime' =&amp;gt; 1296000,
  'session_lifetime' =&amp;gt; 86400,
  'session_keepalive' =&amp;gt; true,
  'firstrunwizard' =&amp;gt; false,
  'user_search_min_length' =&amp;gt; 15,
//'logfile' =&amp;gt; '/var/www/html/nextcloud/data/nextcloud.log', //로그파일 위치를 따로 설정 가능.
  'loglevel' =&amp;gt; 1,
  'log.condition' =&amp;gt; [
    'apps' =&amp;gt; ['admin_audit'],
  ],
  'logtimezone' =&amp;gt; 'Asia/Seoul',	//로그기록 timezone
  'auditlog' =&amp;gt; true,
  'log_query' =&amp;gt; true,
  'app_install_overwrite' =&amp;gt; 
  array (
    0 =&amp;gt; 'files_trackdownloads',
    1 =&amp;gt; 'ransomware_protection',
  ),
  'admin_audit' =&amp;gt; [
    'ignored_events' =&amp;gt; [
        'OCA\Federation\Events\ShareCreated',
        'OCA\Federation\Events\ShareAccepted',
        'OCA\Federation\Events\ShareDeclined',
        'OCA\Federation\Events\ShareRemoved'
    ]
  ], //Federation 로그 비활성화. Federation는 nextcloud간 클라우드 연합시 사용됨. 단속으로 사용시에는 Federation 앱을 비활성화 후 로그도 비활성화 필요.
  'maintenance' =&amp;gt; false,
  'theme' =&amp;gt; '',
);&lt;/code&gt;&lt;/pre&gt;</description>
      <author>주술쟁이</author>
      <guid isPermaLink="true">https://mesmerist.tistory.com/83</guid>
      <comments>https://mesmerist.tistory.com/entry/nextcloud-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95#entry83comment</comments>
      <pubDate>Mon, 26 Aug 2024 20:19:41 +0900</pubDate>
    </item>
    <item>
      <title>nextcloud 자동 백업</title>
      <link>https://mesmerist.tistory.com/entry/nextcloud-%EC%9E%90%EB%8F%99-%EB%B0%B1%EC%97%85-%EB%93%B1-%EC%86%8C%EC%86%8C%ED%95%9C-%EC%85%8B%ED%8C%85</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;자동 백업을 하기 위한 전략을 아래와 같이 만들었다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;유저가 파일을 올림과 동시에 백업.&lt;/li&gt;
&lt;li&gt;파일이 변경한 경우에 이력 파일과 원본 파일 모두 백업.&lt;/li&gt;
&lt;li&gt;삭제 폴더는 백업에서 제외.&lt;/li&gt;
&lt;li&gt;기타 환경 설정 및 임시 파일과 폴더는 제거.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 조건을 만족하기 위해서는 아래 파일과 폴더들을 제외 시켜야 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;.part 파일(파일 다운로드 중일 때 생성되는 임시 파일)&lt;/li&gt;
&lt;li&gt;appdata_* 폴더(계정 생성과 같이 nextcloud 앱이 사용하는 임시 폴더)&lt;/li&gt;
&lt;li&gt;file_trashbin 폴더(휴지통 폴더)&lt;/li&gt;
&lt;li&gt;cashe 폴더(각 유저별 캐쉬 폴더)&lt;/li&gt;
&lt;li&gt;uploads 폴더(용량이 큰 파일을 저장할 때 사용하는 임시 폴더)&lt;/li&gt;
&lt;li&gt;audit.log nextcloud.log : nextcloud 접속 로그 및 기타 각종 로그가 기록되는 파일&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 파일과 폴더를 제외하고 파일 생성을 모니터링 하기 위해 inotifywait 를 설치하고 아래와 같이 sh를 만들었다.&lt;/p&gt;
&lt;pre id=&quot;code_1724670419738&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#!/bin/bash

# 감시할 Nextcloud 데이터 디렉토리
WATCH_DIR=&quot;/var/www/html/nextcloud/data&quot;

# inotifywait 사용하여 파일 추가 시 백업 스크립트 실행
inotifywait -m -r --exclude '.*\.part$|appdata_.*|files_trashbin/.*|cache/.*|.*/uploads/.*|audit\.log$|nextcloud\.log$' -e close_write -e moved_to --format '%w%f' &quot;$WATCH_DIR&quot; | while read FILE
do
    SRC_PATH=$(dirname &quot;$FILE&quot;)
    SRC_FILE=$(basename &quot;$FILE&quot;)

    /usr/local/bin/nextcloud_file_backup.sh &quot;$SRC_PATH&quot; &quot;$SRC_FILE&quot;
done&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 sh를 watch_nextcloud_data.sh 파일명으로 /usr/local/bin에 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nextcloud_file_backup.sh 파일을 하나 더 생성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1724670508322&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#!/bin/bash

# 백업 경로 설정
BACKUP_DIR=&quot;/data/backup&quot;

# 파일이 추가된 경로와 파일명을 인자로 받음
SRC_PATH=&quot;$1&quot;
SRC_FILE=&quot;$2&quot;
MODIFIED_PATH=$(echo &quot;$SRC_PATH&quot; | sed 's|/var/www/html/nextcloud/data/||')

# 백업 디렉토리 구조 생성 (원본과 동일한 경로로)
mkdir -p &quot;$BACKUP_DIR/$MODIFIED_PATH&quot;

# 파일 복사
cp &quot;$SRC_PATH/$SRC_FILE&quot; &quot;$BACKUP_DIR/$MODIFIED_PATH/&quot;

# 로그 기록
echo &quot;[$(date)] $SRC_FILE backed up to $BACKUP_DIR/$MODIFIED_PATH&quot; &amp;gt;&amp;gt; /var/log/nextcloud_backup.log&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 sh은 실제로 유저의 파일을 백업하기 위한 sh이다. 임시로 로컬의 /data/backup 폴더에 백업한다. 필요시 리모트의 다른 경로에 백업하길 권장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crontab에 등록하여 위 sh가 항상 실행이 되도록 설정한다.&lt;/p&gt;
&lt;pre id=&quot;code_1724670624711&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;gt; crontab -e

#아래 txt 추가
@reboot /usr/local/bin/watch_nextcloud_data.sh &amp;amp;&lt;/code&gt;&lt;/pre&gt;</description>
      <author>주술쟁이</author>
      <guid isPermaLink="true">https://mesmerist.tistory.com/82</guid>
      <comments>https://mesmerist.tistory.com/entry/nextcloud-%EC%9E%90%EB%8F%99-%EB%B0%B1%EC%97%85-%EB%93%B1-%EC%86%8C%EC%86%8C%ED%95%9C-%EC%85%8B%ED%8C%85#entry82comment</comments>
      <pubDate>Mon, 26 Aug 2024 20:11:56 +0900</pubDate>
    </item>
    <item>
      <title>sonarqube에서 gitlab project 불러오기</title>
      <link>https://mesmerist.tistory.com/entry/sonarqube%EC%97%90%EC%84%9C-gitlab-project-%EB%B6%88%EB%9F%AC%EC%98%A4%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;우선 연동을 위해서는 sonarqube에서 사용할 gitlab 계정이 필요함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gitlab 계정은 프로젝트에 코멘트를 남기기 위해서 연동할 project나 group 대한 reporter 권한이 필요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;749&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yQHNz/btsIJVVDAu7/3l4vDrfRdrDVmhqquVkiWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yQHNz/btsIJVVDAu7/3l4vDrfRdrDVmhqquVkiWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yQHNz/btsIJVVDAu7/3l4vDrfRdrDVmhqquVkiWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyQHNz%2FbtsIJVVDAu7%2F3l4vDrfRdrDVmhqquVkiWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;334&quot; height=&quot;749&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;749&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 생성한 계정에서 access token을 발행한다. token의 유효기간은 최대 1년이다. token은 api 권한을 부여한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ye4QW/btsImdVX7q2/jf3UWxyT2XH4MizWlpQOL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ye4QW/btsImdVX7q2/jf3UWxyT2XH4MizWlpQOL0/img.png&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;346&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;42.17&quot; style=&quot;width: 41.6846%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ye4QW/btsImdVX7q2/jf3UWxyT2XH4MizWlpQOL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fye4QW%2FbtsImdVX7q2%2Fjf3UWxyT2XH4MizWlpQOL0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;601&quot; height=&quot;346&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Oir9J/btsImcCKf2X/3ZxMSqhhIMYrkjWDkpj9kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Oir9J/btsImcCKf2X/3ZxMSqhhIMYrkjWDkpj9kk/img.png&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;401&quot; data-is-animation=&quot;false&quot; style=&quot;width: 57.1526%;&quot; data-widthpercent=&quot;57.83&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Oir9J/btsImcCKf2X/3ZxMSqhhIMYrkjWDkpj9kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOir9J%2FbtsImcCKf2X%2F3ZxMSqhhIMYrkjWDkpj9kk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;955&quot; height=&quot;401&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 생성된 token은 sonarqube의 DevOps Platform Integrations 에 등록하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PiLIO/btsIlTXKMOO/4LGLmKFzYg9PRqevYsSfdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PiLIO/btsIlTXKMOO/4LGLmKFzYg9PRqevYsSfdk/img.png&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;643&quot; data-is-animation=&quot;false&quot; width=&quot;675&quot; height=&quot;446&quot; style=&quot;width: 64.5225%; margin-right: 10px;&quot; data-widthpercent=&quot;65.28&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PiLIO/btsIlTXKMOO/4LGLmKFzYg9PRqevYsSfdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPiLIO%2FbtsIlTXKMOO%2F4LGLmKFzYg9PRqevYsSfdk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;973&quot; height=&quot;643&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SrdVg/btsIkDuRIlM/Co20lCTxMLoHKD0m4ic4K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SrdVg/btsIkDuRIlM/Co20lCTxMLoHKD0m4ic4K0/img.png&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;671&quot; data-is-animation=&quot;false&quot; style=&quot;width: 34.3147%;&quot; data-widthpercent=&quot;34.72&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SrdVg/btsIkDuRIlM/Co20lCTxMLoHKD0m4ic4K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSrdVg%2FbtsIkDuRIlM%2FCo20lCTxMLoHKD0m4ic4K0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;540&quot; height=&quot;671&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보안 강화를 위해 access token은 암호화를 하여 등록하는 것을 권장한다.&amp;nbsp;암호화 방법은 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Administration - Configuration - Encrytion 에 생성한 access token을 입력 Encrypt를 진행하면 암호화된 값을 얻을 수 있다. 암호화된 access token을 personal access token에 교체하여 등록하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btPh6x/btsIk8nNjC7/cF3KcdSpvUGlVSrtKQkQ80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btPh6x/btsIk8nNjC7/cF3KcdSpvUGlVSrtKQkQ80/img.png&quot; data-origin-width=&quot;832&quot; data-origin-height=&quot;568&quot; data-is-animation=&quot;false&quot; style=&quot;width: 63.4417%; margin-right: 10px;&quot; data-widthpercent=&quot;64.19&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btPh6x/btsIk8nNjC7/cF3KcdSpvUGlVSrtKQkQ80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtPh6x%2FbtsIk8nNjC7%2FcF3KcdSpvUGlVSrtKQkQ80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;832&quot; height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgsjLX/btsIlP8Q6fj/A6OULxt909uNFpDPtUYBYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgsjLX/btsIlP8Q6fj/A6OULxt909uNFpDPtUYBYK/img.png&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;673&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; style=&quot;width: 35.3955%;&quot; data-widthpercent=&quot;35.81&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgsjLX/btsIlP8Q6fj/A6OULxt909uNFpDPtUYBYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgsjLX%2FbtsIlP8Q6fj%2FA6OULxt909uNFpDPtUYBYK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;550&quot; height=&quot;673&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 사용자는 sonarqube에 로그인 후 project를 가져올 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;sonarqube에 등록할 개인 access token을 생성한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4DQlg/btsIjL8b77k/KWK3AHpbScWhSNY7VwBFsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4DQlg/btsIjL8b77k/KWK3AHpbScWhSNY7VwBFsK/img.png&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;656&quot; data-is-animation=&quot;false&quot; style=&quot;width: 45.2818%; margin-right: 10px;&quot; data-widthpercent=&quot;45.81&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4DQlg/btsIjL8b77k/KWK3AHpbScWhSNY7VwBFsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4DQlg%2FbtsIjL8b77k%2FKWK3AHpbScWhSNY7VwBFsK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;947&quot; height=&quot;656&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IuZbi/btsIlX6VYUI/zMfNivAgzDB9ktGBZD1tLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IuZbi/btsIlX6VYUI/zMfNivAgzDB9ktGBZD1tLk/img.png&quot; data-origin-width=&quot;951&quot; data-origin-height=&quot;557&quot; data-is-animation=&quot;false&quot; style=&quot;width: 53.5554%;&quot; data-widthpercent=&quot;54.19&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IuZbi/btsIlX6VYUI/zMfNivAgzDB9ktGBZD1tLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIuZbi%2FbtsIlX6VYUI%2FzMfNivAgzDB9ktGBZD1tLk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;951&quot; height=&quot;557&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성한 access token을 sonarqube에 등록한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;511&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJW1Iu/btsIlS5BIVK/VMjsGFbsjcT9E2U19LZND1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJW1Iu/btsIlS5BIVK/VMjsGFbsjcT9E2U19LZND1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJW1Iu/btsIlS5BIVK/VMjsGFbsjcT9E2U19LZND1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJW1Iu%2FbtsIlS5BIVK%2FVMjsGFbsjcT9E2U19LZND1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;539&quot; height=&quot;511&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;511&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;access token 등록 후 가져올 프로젝트 목록을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bp2hkX/btsImbX9UwD/x2bVIQqk6TI01Y4TX5lMXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bp2hkX/btsImbX9UwD/x2bVIQqk6TI01Y4TX5lMXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bp2hkX/btsImbX9UwD/x2bVIQqk6TI01Y4TX5lMXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbp2hkX%2FbtsImbX9UwD%2Fx2bVIQqk6TI01Y4TX5lMXk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1000&quot; height=&quot;377&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;import를 하게 되면 아래와 같은 화면이 나온다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;999&quot; data-origin-height=&quot;347&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dKs5Mm/btsIkjqqkvA/a5aIaMFbpW2AFmNQZAs12k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dKs5Mm/btsIkjqqkvA/a5aIaMFbpW2AFmNQZAs12k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dKs5Mm/btsIkjqqkvA/a5aIaMFbpW2AFmNQZAs12k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdKs5Mm%2FbtsIkjqqkvA%2Fa5aIaMFbpW2AFmNQZAs12k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;999&quot; height=&quot;347&quot; data-origin-width=&quot;999&quot; data-origin-height=&quot;347&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 소스 코드 기준을 정하는데 global setting으로 설정. 자세한 내용은 &lt;a title=&quot;여기&quot; href=&quot;https://docs.sonarsource.com/sonarqube/10.6/project-administration/clean-as-you-code-settings/defining-new-code/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기&lt;/a&gt;를 참조&lt;/p&gt;</description>
      <category>DevSecOps</category>
      <author>주술쟁이</author>
      <guid isPermaLink="true">https://mesmerist.tistory.com/81</guid>
      <comments>https://mesmerist.tistory.com/entry/sonarqube%EC%97%90%EC%84%9C-gitlab-project-%EB%B6%88%EB%9F%AC%EC%98%A4%EA%B8%B0#entry81comment</comments>
      <pubDate>Wed, 3 Jul 2024 14:57:27 +0900</pubDate>
    </item>
    <item>
      <title>nextcloud 설치하기(ubuntu 24.04 nginx php 8.3 환경에서 설치)</title>
      <link>https://mesmerist.tistory.com/entry/nextcloud-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. OS 업데이트 실시, 압축 풀기 위해 bzip2 설치, php 관련 설치 진행&lt;/p&gt;
&lt;pre id=&quot;code_1718868382056&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update
sudo apt upgrade
sudo apt install bzip2
sudo apt install php8.3-fpm
sudo apt install php8.3-ctype php8.3-curl php8.3-dom php8.3-gd php8.3-mbstring php8.3-zip php8.3-intl php8.3-gmp php8.3-bcmath libmagickcore-6.q16-6-extra php8.3-apcu php8.3-bz2 php8.3-imagick php8.3-imap php8.3-ldap php8.3-mysql php8.3-smbclient php8.3-xml php8.3-zip&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. /etc/hosts에 자신의 도메인 주소를 꼭 넣어줄 것&lt;/p&gt;
&lt;pre id=&quot;code_1718931865402&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;127.0.0.1 도메인&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. mariadb설치 및 보안 옵션을 실행&lt;/p&gt;
&lt;pre id=&quot;code_1718868414521&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install mariadb-server
sudo mysql_secure_installation

Enter current password for root : 초기 설치시에는 패스워드가 없기에 enter를 실행합니다
Change the root password : Y를 입력하고 패스워드를 설정합니다.
Remove anonymou user: 익명 사용자를 제거하려면 Y를 입력합니다.
Disallow root login remotely: 원격 로그인을 활성화 하려면 Y, 비활성화 하려면 N를 입력합니다.
Remove test database and access to it: test 데이터베이스를 삭제하려면 Y를 입력합니다.
Reload privilege tables now: 변경 사항을 저장하려면 Y를 입력합니다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. mariadb에 DB 생성, 계정 생성하여 연결하기&lt;/p&gt;
&lt;pre id=&quot;code_1718868501027&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mysql -u root -p

CREATE DATABASE nextcloud;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY '비밀번호';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
exit;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. nextcloud 파일 다운로드&lt;/p&gt;
&lt;pre id=&quot;code_1718869462750&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd /var/www/html
sudo wget https://download.nextcloud.com/server/releases/latest.tar.bz2
sudo tar -xvf latest.tar.bz2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. /etc/nginx/sites-available/drive 파일을 아래와 같이 작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; (&lt;a href=&quot;https://docs.nextcloud.com/server/latest/admin_manual/installation/nginx.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.nextcloud.com/server/latest/admin_manual/installation/nginx.html&lt;/a&gt;를 참조함.)&lt;/p&gt;
&lt;pre id=&quot;code_1718872516620&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;upstream php-handler {
    server unix:/var/run/php/php8.3-fpm.sock;
}

# Set the `immutable` cache control options only for assets with a cache busting `v` argument
map $arg_v $asset_immutable {
    &quot;&quot; &quot;&quot;;
    default &quot;immutable&quot;;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name 서버명;

    ssl_certificate  /etc/nginx/certificate/.crt;
    ssl_certificate_key /etc/nginx/certificate/.key;
    ssl_trusted_certificate /etc/nginx/certificate/.ca-bundle;

    
    #### HSTS AND HSTS PRELOAD CONFIGURATION
    # add_header Strict-Transport-Security &quot;max-age=15768000; includeSubDomains; preload&quot; always;
    #### ONLY UNCOMMENT THE ABOVE IF YOU KNOW WHAT YOU'RE DOING!

    root /var/www/html/nextcloud;

    # Prevent nginx HTTP Server Detection
    server_tokens off;

    # set max upload size and increase upload timeout:
    client_max_body_size 512M;
    client_body_timeout 300s;
    fastcgi_buffers 64 4K;

    # Enable gzip but do not remove ETag headers
    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml text/javascript application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/wasm application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

    # Pagespeed is not supported by Nextcloud, so if your server is built
    # with the `ngx_pagespeed` module, uncomment this line to disable it.
    #pagespeed off;

    # The settings allows you to optimize the HTTP2 bandwitdth.
    # See https://blog.cloudflare.com/delivering-http-2-upload-speed-improvements/
    # for tunning hints
    client_body_buffer_size 512k;

    # HTTP response headers borrowed from Nextcloud `.htaccess`
    add_header Referrer-Policy                   &quot;no-referrer&quot;       always;
    add_header X-Content-Type-Options            &quot;nosniff&quot;           always;
    add_header X-Download-Options                &quot;noopen&quot;            always;
    add_header X-Frame-Options                   &quot;SAMEORIGIN&quot;        always;
    add_header X-Permitted-Cross-Domain-Policies &quot;none&quot;              always;
    add_header X-Robots-Tag                      &quot;noindex, nofollow&quot; always;
    add_header X-XSS-Protection                  &quot;1; mode=block&quot;     always;
    add_header Strict-Transport-Security         'max-age=31536000; includeSubDomains; preload';
    # Remove X-Powered-By, which is an information leak
    fastcgi_hide_header X-Powered-By;

    # Add .mjs as a file extension for javascript
    # Either include it in the default mime.types list
    # or include you can include that list explicitly and add the file extension
    # only for Nextcloud like below:
    include mime.types;
    types {
        text/javascript js mjs;
        application/wasm wasm;
    }

    # Specify how to handle directories -- specifying `/index.php$request_uri`
    # here as the fallback means that Nginx always exhibits the desired behaviour
    # when a client requests a path that corresponds to a directory that exists
    # on the server. In particular, if that directory contains an index.php file,
    # that file is correctly served; if it doesn't, then the request is passed to
    # the front-end controller. This consistent behaviour means that we don't need
    # to specify custom rules for certain paths (e.g. images and other assets,
    # `/updater`, `/ocm-provider`, `/ocs-provider`), and thus
    # `try_files $uri $uri/ /index.php$request_uri`
    # always provides the desired behaviour.
    index index.php index.html /index.php$request_uri;

    # Rule borrowed from `.htaccess` to handle Microsoft DAV clients
    location = / {
        if ( $http_user_agent ~ ^DavClnt ) {
            return 302 /remote.php/webdav/$is_args$args;
        }
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # Make a regex exception for `/.well-known` so that clients can still
    # access it despite the existence of the regex rule
    # `location ~ /(\.|autotest|...)` which would otherwise handle requests
    # for `/.well-known`.
    location ^~ /.well-known {
        # The rules in this block are an adaptation of the rules
        # in `.htaccess` that concern `/.well-known`.

        location = /.well-known/carddav { return 301 /remote.php/dav/; }
        location = /.well-known/caldav  { return 301 /remote.php/dav/; }

        location /.well-known/acme-challenge    { try_files $uri $uri/ =404; }
        location /.well-known/pki-validation    { try_files $uri $uri/ =404; }

        # Let Nextcloud's API for `/.well-known` URIs handle all other
        # requests by passing them to the front-end controller.
        return 301 /index.php$request_uri;
    }

    # Rules borrowed from `.htaccess` to hide certain paths from clients
    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/)  { return 404; }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console)                { return 404; }

    # Ensure this block, which passes PHP files to the PHP process, is above the blocks
    # which handle static assets (as seen below). If this block is not declared first,
    # then Nginx will encounter an infinite rewriting loop when it prepends `/index.php`
    # to the URI, resulting in a HTTP 500 error response.
    location ~ \.php(?:$|/) {
        # Required for legacy support
        rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode\/proxy) /index.php$request_uri;

        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        set $path_info $fastcgi_path_info;

        try_files $fastcgi_script_name =404;

        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param HTTPS on;

        fastcgi_param modHeadersAvailable true;         # Avoid sending the security headers twice
        fastcgi_param front_controller_active true;     # Enable pretty urls
        fastcgi_pass php-handler;

        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;

        fastcgi_max_temp_file_size 0;
    }

    # Serve static files
    location ~ \.(?:css|js|mjs|svg|gif|png|jpg|ico|wasm|tflite|map|ogg|flac)$ {
        try_files $uri /index.php$request_uri;
        # HTTP response headers borrowed from Nextcloud `.htaccess`
        add_header Cache-Control                     &quot;public, max-age=15778463$asset_immutable&quot;;
        add_header Referrer-Policy                   &quot;no-referrer&quot;       always;
        add_header X-Content-Type-Options            &quot;nosniff&quot;           always;
        add_header X-Frame-Options                   &quot;SAMEORIGIN&quot;        always;
        add_header X-Permitted-Cross-Domain-Policies &quot;none&quot;              always;
        add_header X-Robots-Tag                      &quot;noindex, nofollow&quot; always;
        add_header X-XSS-Protection                  &quot;1; mode=block&quot;     always;
        access_log off;     # Optional: Don't log access to assets
    }

    location ~ \.woff2?$ {
        try_files $uri /index.php$request_uri;
        expires 7d;         # Cache-Control policy borrowed from `.htaccess`
        access_log off;     # Optional: Don't log access to assets
    }

    # Rule borrowed from `.htaccess`
    location /remote {
        return 301 /remote.php$request_uri;
    }

    location / {
        try_files $uri $uri/ /index.php$request_uri;
    }
    
    location ^~ /push/ {
        proxy_pass http://127.0.0.1:7867/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection &quot;Upgrade&quot;;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7.&amp;nbsp;/etc/nginx/sites-enabled의 default 심볼링크는 삭제할 것.(다른 도메인 설정이 있는 경우 보안 체크시 영향이 있음)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 위 파일에 대한 심볼링크 생성 후 nginx 재기동&lt;/p&gt;
&lt;pre id=&quot;code_1718872630838&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ln -s /etc/nginx/sites-available/drive /etc/nginx/sites-enabled/
sudo systemctl reload nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 설정한 자신의 도메인으로 접속 가능.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 초기 관리자 설정(비밀번호 등록등). 생성한 db와 연결 작업등 초기화 작업이 필요함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9.&amp;nbsp;설치 후 보안 점검시 나오는 몇가지 문제 해결 방법&lt;/p&gt;
&lt;pre id=&quot;code_1718873581729&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vi /var/www/html/nextcloud/config/config.php
에서 
  'default_phone_region' =&amp;gt; 'JP',
를 등록하여 기본 지역 설정 필요.
  'maintenance_window_start' =&amp;gt; 3,
를 설정하여 cron이 동작하는 시간을 지정할 수 있음.

sudo vi /etc/php/8.3/fpm/pool.d/www.conf
에서 아래 주석 제거 필요
;clear_env = no
;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. cron 설정&lt;/p&gt;
&lt;pre id=&quot;code_1718933011048&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo crontab -u www-data -e
을 실행하여 아내 문장을 등록한다.
*/5  *  *  *  * php -f /var/www/html/nextcloud/cron.php

등록 성공여부는
sudo crontab -u www-data -l
로 확인가능&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11. 성능 향상을 위해 redis를 설치.&lt;/p&gt;
&lt;pre id=&quot;code_1718933886552&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#레포지토리 등록
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo &quot;deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main&quot; | sudo tee /etc/apt/sources.list.d/redis.list
#redis 설치
sudo apt-get install redis php8.3-redis
#redis 서비스 등록 및 실행
sudo systemctl enable redis-server
sudo systemctl start redis-server&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;12. redis를 캐쉬로 사용하도록 config 설정.&lt;/p&gt;
&lt;pre id=&quot;code_1718934655902&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#sudo vi /var/www/html/nextcloud/config/config.php
#에 아래 내용을 추가
  'memcache.distributed' =&amp;gt; '\\OC\\Memcache\\Redis',
  'memcache.locking' =&amp;gt; '\\OC\\Memcache\\Redis',
  'memcache.local' =&amp;gt; '\\OC\\Memcache\\APCu',
  'redis' =&amp;gt;
  array (
    'host' =&amp;gt; 'localhost',
    'port' =&amp;gt; 6379,
  ),&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기타 장애 확인시 필요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo&amp;nbsp;-u&amp;nbsp;www-data&amp;nbsp;php&amp;nbsp;/var/www/html/nextcloud/occ&amp;nbsp;maintenance:repair&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1718943770660&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#/var/www/html/nextcloud/config/config.php에 아래 옵션에서 data저장소 경로를 지정할 수 있다.
'datadirectory' =&amp;gt; '/var/www/html/nextcloud/data',&lt;/code&gt;&lt;/pre&gt;</description>
      <author>주술쟁이</author>
      <guid isPermaLink="true">https://mesmerist.tistory.com/80</guid>
      <comments>https://mesmerist.tistory.com/entry/nextcloud-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0#entry80comment</comments>
      <pubDate>Thu, 20 Jun 2024 17:37:50 +0900</pubDate>
    </item>
    <item>
      <title>langsmith 설정하기</title>
      <link>https://mesmerist.tistory.com/entry/langsmith-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;langchain 내부 동작 확인을 하기 위해서 langsmith 설정을 해 주어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://smith.langchain.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://smith.langchain.com/&lt;/a&gt; 가입을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가입 후 아래와 같은 화면에서&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1138&quot; data-origin-height=&quot;414&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/utWHA/btsHUg1KhQC/elQDtk576Id3b0Dp0OIcKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/utWHA/btsHUg1KhQC/elQDtk576Id3b0Dp0OIcKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/utWHA/btsHUg1KhQC/elQDtk576Id3b0Dp0OIcKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FutWHA%2FbtsHUg1KhQC%2FelQDtk576Id3b0Dp0OIcKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1138&quot; height=&quot;414&quot; data-origin-width=&quot;1138&quot; data-origin-height=&quot;414&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;New Project를 클릭하여 신규 프로젝트를 만든다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c06MdZ/btsHUvEkjNP/3WtNGRaKRpbwlyWof3KHf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c06MdZ/btsHUvEkjNP/3WtNGRaKRpbwlyWof3KHf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c06MdZ/btsHUvEkjNP/3WtNGRaKRpbwlyWof3KHf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc06MdZ%2FbtsHUvEkjNP%2F3WtNGRaKRpbwlyWof3KHf0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;811&quot; height=&quot;254&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;254&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 이름과 설명을 적어주면 된다. 후에 프로그램의 디버깅을 위한 프로젝트명과 일치 시켜야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1718092018657&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;os.environ[&quot;LANGCHAIN_PROJECT&quot;] = &quot;pt-prickly-commitment-28&quot;
os.environ[&quot;LANGCHAIN_TRACING_V2&quot;] = &quot;true&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트와 연결하기 위한 API Keys를 만들어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽 하단의 Personal &amp;gt; Manage Organizations 를 클릭하면 아래와 같은 화면에서 Create API Key 버튼을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;909&quot; data-origin-height=&quot;569&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQ5yNC/btsHUD3elmk/kVQIiJfFnMjuigfF0vUNv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQ5yNC/btsHUD3elmk/kVQIiJfFnMjuigfF0vUNv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQ5yNC/btsHUD3elmk/kVQIiJfFnMjuigfF0vUNv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQ5yNC%2FbtsHUD3elmk%2FkVQIiJfFnMjuigfF0vUNv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;909&quot; height=&quot;569&quot; data-origin-width=&quot;909&quot; data-origin-height=&quot;569&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성한 키는 아래와 같이 두가지 방법 중 하나의 방법으로 저장해 둔다.&lt;/p&gt;
&lt;pre id=&quot;code_1718092524591&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.env 파일
LANGCHAIN_API_KEY=&quot;lsv2_pt_.......&quot;
또는 소스에서
os.environ[&quot;LANGCHAIN_API_KEY&quot;]=&quot;lsv2_pt_.......&quot;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>LLM</category>
      <author>주술쟁이</author>
      <guid isPermaLink="true">https://mesmerist.tistory.com/79</guid>
      <comments>https://mesmerist.tistory.com/entry/langsmith-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0#entry79comment</comments>
      <pubDate>Tue, 11 Jun 2024 17:00:20 +0900</pubDate>
    </item>
    <item>
      <title>miniforge의 새로운 가상환경 만들기 + jupyter Notebook 연결</title>
      <link>https://mesmerist.tistory.com/entry/miniforge%EC%9D%98-%EC%83%88%EB%A1%9C%EC%9A%B4-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
      <description>&lt;pre id=&quot;code_1718069056475&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;conda create -n new python=3.11&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-n 새로운 가상환경 이름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;python 파이썬 버전 설정&lt;/p&gt;
&lt;pre id=&quot;code_1718069833304&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;conda activate tavily
pip install jupyter notebook&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성한 가상환경으로 접속 후 jupyter 설치&lt;/p&gt;
&lt;pre id=&quot;code_1718069956930&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python -m ipykernel install --user --name tavily --display-name &quot;tavily&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성한 가상환경을 커널에 연결하여 주피터 노트북에 보이게 설정하기&lt;/p&gt;</description>
      <category>OS/Ubuntu</category>
      <author>주술쟁이</author>
      <guid isPermaLink="true">https://mesmerist.tistory.com/78</guid>
      <comments>https://mesmerist.tistory.com/entry/miniforge%EC%9D%98-%EC%83%88%EB%A1%9C%EC%9A%B4-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD-%EB%A7%8C%EB%93%A4%EA%B8%B0#entry78comment</comments>
      <pubDate>Tue, 11 Jun 2024 10:25:21 +0900</pubDate>
    </item>
    <item>
      <title>miniforge 설치하기</title>
      <link>https://mesmerist.tistory.com/entry/miniforge-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Anaconda가 유료인 관계로 무료로 사용하기 위한 방법을 소개함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유료인 이유에 대한 자세한 설명은 &lt;a title=&quot;여기&quot; href=&quot;https://devocean.sk.com/blog/techBoardDetail.do?ID=164615&amp;amp;boardType=techBlog%EF%BB%BF&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기&lt;/a&gt;에서 확인할 수 있다.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;background-color: #f6f8fa; color: #1f2328; text-align: start;&quot;&gt;&lt;code&gt;curl -L -O &quot;https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh&quot;
bash Miniforge3-$(uname)-$(uname -m).sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 OS 및 &lt;span style=&quot;background-color: #ffffff; color: #1f2328; text-align: center;&quot;&gt;Architecture별로 상세 내용은 &lt;a title=&quot;여기&quot; href=&quot;https://conda-forge.org/miniforge/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기&lt;/a&gt;에서 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1f2328; text-align: center;&quot;&gt;ubuntu라면 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;curl -L -O &quot;https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 다운받은 후 설치한다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #f6f8fa; color: #1f2328; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;bash Miniforge3-Linux-x86_64.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mamba?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;conda의 설치 단점을 보완하기 위해 C++로 작성된 것이 맘바임. conda를 mamba로 교체하여 사용하기만 하면 됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선택은 자유.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>OS/Ubuntu</category>
      <author>주술쟁이</author>
      <guid isPermaLink="true">https://mesmerist.tistory.com/77</guid>
      <comments>https://mesmerist.tistory.com/entry/miniforge-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0#entry77comment</comments>
      <pubDate>Thu, 6 Jun 2024 16:32:44 +0900</pubDate>
    </item>
    <item>
      <title>ubuntu에서 docker 설치</title>
      <link>https://mesmerist.tistory.com/entry/ubuntu%EC%97%90%EC%84%9C-docker-%EC%84%A4%EC%B9%98</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;apt 대신에 sudo snap install docker 명령어로 설치할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럴경우 OS에서 일반 사용자로 docker를 실행할 때 권한 문제가 발생할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 사용자 그룹을 만들어 추가를 해 주어야 한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;br /&gt;sudo addgroup --system docker&lt;br /&gt;sudo adduser $USER docker&lt;br /&gt;newgrp docker&lt;br /&gt;sudo snap disable docker&lt;br /&gt;sudo snap enable docker&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고 사항&lt;/p&gt;
&lt;p style=&quot;background-color: #f5f5f5; color: #111111; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Snap&lt;/b&gt;은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Linux&lt;/b&gt;에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;자체 포함된 소프트웨어 패키지&lt;/b&gt;를 관리하는 데 사용되는 명령입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.howtogeek.com/660193/how-to-work-with-snap-packages-on-linux/&quot; data-citationid=&quot;d88807a0-8a20-5d5a-771a-78d214939d96-10-group&quot;&gt;이 패키지들은&lt;span&gt;&amp;nbsp;&lt;/span&gt;.deb&lt;span&gt;&amp;nbsp;&lt;/span&gt;패키지에 대응하는 것으로,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;snap&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;명령어를 사용하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;snap 패키지를 검색, 설치, 업데이트, 제거 및 정보 표시&lt;/b&gt;할 수 있습니다&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #f5f5f5; color: #111111; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여기 몇 가지&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;snap 명령어 사용 예시&lt;/b&gt;가 있습니다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #f5f5f5; color: #111111; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Snap 버전 확인&lt;/b&gt;:&lt;/li&gt;
&lt;li&gt;
&lt;pre class=&quot;ada&quot;&gt;&lt;code&gt;snap --version
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Snap 설치&lt;/b&gt;:&lt;/li&gt;
&lt;li&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;sudo snap install &amp;lt;package-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Snap 업데이트&lt;/b&gt;:&lt;/li&gt;
&lt;li&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;sudo snap refresh &amp;lt;package-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Snap 제거&lt;/b&gt;:&lt;/li&gt;
&lt;li&gt;
&lt;pre class=&quot;lua&quot;&gt;&lt;code&gt;sudo snap remove &amp;lt;package-name&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>Docker</category>
      <author>주술쟁이</author>
      <guid isPermaLink="true">https://mesmerist.tistory.com/75</guid>
      <comments>https://mesmerist.tistory.com/entry/ubuntu%EC%97%90%EC%84%9C-docker-%EC%84%A4%EC%B9%98#entry75comment</comments>
      <pubDate>Mon, 8 Apr 2024 16:17:46 +0900</pubDate>
    </item>
  </channel>
</rss>